import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class StorageService {
  constructor() {}

  /**
   * 获取缓存数据
   * @param key 缓存数据键名
   */
  get(key: string): any {
    const result = localStorage.getItem(key);
    try {
      return JSON.parse(result);
    } catch (err) {
      return result;
    }
  }

  /**
   * 设置缓存数据
   * @param key 缓存数据键名
   * @param data 缓存数据，禁止缓存 undefined 类型数据
   */
  set(key: string, data: any): void {
    if (typeof data === 'undefined') {
      throw new Error('禁止缓存 undefined 类型数据');
    } else if (typeof data === 'object') {
      localStorage.setItem(key, JSON.stringify(data));
    } else {
      localStorage.setItem(key, data);
    }
  }

  /**
   * 删除缓存数据
   * @param key 缓存数据键名
   */
  remove(key: string): void {
    localStorage.removeItem(key);
  }

  /**
   * 清空所有缓存数据
   */
  clear(): void {
    localStorage.clear();
  }
}
